perm filename AREAS.SAI[PUB,TES]1 blob sn#129293 filedate 1974-11-07 generic text, type T, neo UTF8
00100	BEGOF("AREAS")
00200	
00300	COMMENT
00400	
00500	An area declaration results in a declaration record of type AREATYPE
00600	on the ISTK stack.  Each instantiation of an area on some page
00700	results in a distinct instantiation record allocated as a new dynamic
00800	array.
00900	
01000	An instantiated area proceeds through three or four stages of status:
01100	made but unopened, opened, closed, [and disdeclared].  PLACE makes
01200	unopened areas, PLACELINE forces the area to open, filling it up or
01300	closing the page causes the area to close, and the END of the block
01400	in which it is declared causes it to be (closed and) dis-declared.
01500	
01600	;
01700	
01800	PROCEDURES
     

00100	PUBLIC SIMPLE PROCEDURE AREAS! ;$"#
00200	BEGIN "AREAS!"
00300	AVAILREC[0] ← NULLAREAS ← 0 ;
00400	SYMTEXT ← SYMNUM("TEXT") ;
00500	END "AREAS!" ;
     

00100	PUBLIC RECURSIVE PROCEDURE ASSUREAREA ;$"#
00200		IF AREAIDA = 0 OR STATUS NEQ 1 THEN OPENAREA(IF AREAIXM THEN AREAIXM ELSE IXTEXT) ;
     

00100	PUBLIC PROCEDURE BURPAREAS(BOOLEAN VERBOSE) ;$"#
00200	BEGIN TES 8/19/74 CALLED BY DBURP ;
00300	INTEGER NAREAS ; INTEGER ARRAY FOUND[1:100], THISAREA[0:ONE], AA[0:ONE,0:ONE] ;
00400	PROCEDURE BURPAREADECL(INTEGER ILOC, IDA) ;
00500		BEGIN
00600		INTEGER I ;
00700		OUTSTR(
00800		(IF TEXTAR(ILOC) THEN NULL ELSE "TITLE ") &
00900		"AREA " & SYM[LDB(BIXNUM(ILOC))] &
01000		" LINES " & CVS(LINE1(ILOC)) & " TO " & CVS(LINE1(ILOC)+LINECT(ILOC)-1) &
01100		" CHARS " & CVS(CHAR1(ILOC)) & " TO " & CVS(CHAR1(ILOC)+CHARCT(ILOC)-1) &
01200		(IF (I←COLCT(ILOC)) NEQ 1 THEN " IN " & CVS(I) & " COLUMNS " &
01300		    CVS(COLWID(ILOC)) & " WIDE" ELSE NULL) &
01400		CRLF & "    " &
01500		(IF DISD(ILOC) THEN "DISDECLARED " ELSE "DECLARED ") &
01600		(IF FULHIGH(ILOC) THEN "FULL HEIGHT " ELSE NULL) &
01700		(IF FULWIDE(ILOC) THEN "FULL WIDTH " ELSE NULL) &
01800		"AT " & CVOS(ISTKIDA+ILOC) &
01900		(IF (I ← OLD!ACTIVE(ILOC)) AND I NEQ IDA THEN " RECORD "&CVOS(I) ELSE NULL) &
02000		(IF (I ← NEW!ACTIVE(ILOC)) THEN "NEWPAGE RECORD " & CVOS(I) ELSE NULL) &
02100		(IF (I←MARGINS(ILOC)) THEN " MARGINS " & CVS(LMARGX(I)) & SP & CVS(RMARGX(I)) ELSE NULL) &
02200		(IF XCRIBL THEN " FONTS " & PICKFONT(TFONT(ILOC))[3 TO ∞] &
02300			 "*" & PICKFONT(OFONT(ILOC))[3 TO ∞] ELSE NULL) &
02400		(IF FULSTR(SSTK[FOOTSTR(ILOC)]) THEN " FOOTNOTES PENDING" ELSE NULL) &
02500		CRLF) ;
02600		END "BURPAREADECL" ;
02700	PROCEDURE BURPAREARECORD(INTEGER ARIDA; BOOLEAN INFRAME) ;
02800		BEGIN
02900		INTEGER COLS, LINES, I, J, X, Y ;
03000		INTEGER PCOL, PLINE, PPINE ;
03100		BOOLEAN SOME ;
03200		IDASSIGN(ARIDA, THISAREA) ;
03300		IDASSIGN(AAA, AA) ;
03400		IF (I←DEFA) THEN BEGIN FOUND[NAREAS←NAREAS+1]←I ; BURPAREADECL(I, ARIDA) END ;
03500		COLS ← ARRINFO(AA, 2)/2 ; LINES ← ARRINFO(AA,4) ;
03600		IF STATA=1 THEN  TES 8/26/74 IT IS OPEN ;
03700			IF AREAIDA=ARIDA THEN  COMMENT IT'S CURRENT ;
03800				BEGIN
03900				PCOL ← COL ; PLINE ← LINE ; PPINE ← PINE ;
04000				END
04100			ELSE	BEGIN
04200				PCOL ← COLA ;
04300				PLINE ← RH(AA[PCOL,0]) ;
04400				PPINE ← RH(AA[(COLS+COLS-1) MOD (2*COLS) +1, 0]) ;
04500				END ;
04600		IF STATA > 1 THEN
04700			OUTSTR("AREA ? LINES " & CVS(ULLA) & " TO " &
04800				CVS(ULLA+LINECA-1) & " CHARS " & CVS(RH(AA[1,0])) &
04900				" TO ? IN " & CVS(COLCA) & " COLUMNS" & CRLF) ;
05000		OUTSTR(TB &
05100		(IF NOT INFRAME THEN " NOT IN FRAME"
05200		 ELSE IF INA NEQ FRAMEIDA THEN " ** FRAME BACKLINK INCORRECT**"
05300		 ELSE NULL) &
05400		(CASE STATA OF (" UNOPENED", " OPENED", " CLOSED", " DIS-DECLARED")) &
05500		 " AT " & CVOS(ARIDA) &
05600		(IF AREAIDA=ARIDA THEN " (CURRENT)" ELSE NULL) &
05700		(IF XCRIBL THEN
05800			(IF XGENA THEN " XGENLINES = "&CVS(XGENA) ELSE NULL)&
05900			(IF OVERA THEN " OVEREST OF COLUMN 1 = "&CVS(OVERA) ELSE NULL)
06000		 ELSE NULL) &
06100		(IF STATA=1 THEN
06200		  " PLACED "&CVS(PLINE)&" LINES IN COLUMN "&
06300			CVS(IF PCOL>COLS THEN PCOL-COLS ELSE PCOL) &
06400			(IF PCOL>COLS THEN " FOOT" ELSE NULL) &
06500			(IF PCOL>COLS OR PPINE THEN " ("&CVS(PPINE)&" IN THE " &
06600			    (IF PCOL>COLS THEN "LEG)" ELSE "FOOT)")
06700			ELSE NULL)
06800		 ELSE NULL) &
06900		CRLF) ;
07000		IF VERBOSE THEN
07100			BEGIN
07200			OUTSTR(TB&"  LINE"&TB) ;
07300			FOR I←1 THRU COLS DO OUTSTR("     COLUMN  "&CVS(I)&TB) ;
07400			OUTSTR(CRLF & TB & TB) ;
07500			FOR I ← 1 THRU COLS DO OUTSTR("   CALF     FOOT"&TB) ;
07600			OUTSTR(CRLF) ;
07700			FOR J ← 1 THRU LINES DO
07800				BEGIN
07900				SOME ← FALSE ;
08000				FOR I ← 1 THRU 2*COLS DO IF AA[I,J] THEN BEGIN SOME←TRUE;DONE END ;
08100				IF SOME THEN
08200					BEGIN
08300					OUTSTR(TB & "    " & CVS(J) & TB) ;
08400					FOR I ← 1 THRU COLS DO
08500					    FOR Y←0,COLS DO
08600						OUTSTR(IF (X←AA[I+Y,J]) THEN ("     "&CVS(OWLS[X]))[∞-5 TO ∞]&TB ELSE TB) ;
08700					OUTSTR(CRLF) ;
08800					END ;
08900				END ;
09000			END ;
09100		END "BURPAREARECORD" ;
09200	INTEGER A, I, THISIDA, AAIDA ; BOOLEAN DID ;
09300	THISIDA ← WHATIS(THISAREA) ; AAIDA ← WHATIS(AA) ;
09400	IF FRAMEIDA=0 THEN OUTSTR("BETWEEN PAGES"&CRLF)  TES 8/26/74 ;
09500	ELSE	BEGIN
09600		A ← ARF ; NAREAS ← 0 ;
09700		WHILE A DO
09800			BEGIN COMMENT SEARCH THIS FRAME ;
09900			BURPAREARECORD(A, TRUE) ;
10000			A ← ARA ;
10100			END ;
10200		END ;
10300	A ← NULLAREAS ;
10400	WHILE A DO
10500		BEGIN COMMENT SEARCH NULL AREAS LIST (MADE BUT UNOPENED) ;
10600		BURPAREARECORD(A, FALSE) ;
10700		A ← RH(INA) ;
10800		END ;
10900	A ← IHED ;
11000	WHILE A > 1 DO
11100		BEGIN COMMENT SEARCH ISTK ;
11200		IF IXTYPE(A) = AREATYPE THEN
11300			BEGIN
11400			DID ← FALSE ;
11500			FOR I ← 1 THRU NAREAS DO IF FOUND[I]=A THEN
11600				BEGIN DID ← TRUE ; DONE END ;
11700			IF NOT DID THEN BURPAREADECL(A, 0) ;
11800			END ;
11900		A ← IXOLD(A) ;
12000		END ;
12100	MAKEBE(THISIDA, THISAREA) ; MAKEBE(AAIDA, AA) ;
12200	END "BURPAREAS" ;
     

00100	PUBLIC RECURSIVE PROCEDURE CLOSEAREA(INTEGER ITSIX; BOOLEAN DISDECLAREIT) ;$"#
00200	BEGIN "CLOSEAREA"
00300	INTEGER SAVAR, C, WC, NC, CC, LEFC ; BOOLEAN NORESP ;
00400	NORESP ← ITSIX < 0 ; ITSIX ← ABS(ITSIX) ;
00500	IF DISDECLAREIT THEN OLMAX ← OLMAX - LINECT(ITSIX)*COLCT(ITSIX) ;
00600	IF OPEN!ACTIVE(ITSIX) = 0 THEN	IF DISDECLAREIT THEN CLOSET(ITSIX, FALSE, TRUE)
00700					ELSE BEGIN END
00800	ELSE BEGIN SAVAR←AREAIXM; PLACE(ITSIX); IF STATUS=0 THEN REMNULLS ; STATA ← STATUS←2;
00900		ULLA ← LINE1(ITSIX) ;  AA[1,0] ← LEFC ← CHAR1(ITSIX) ;
01000		IF (NC ← COLCT(ITSIX)) > 1 THEN
01100			BEGIN
01200			WC ← COLWID(ITSIX) ; CC ← CHARCT(ITSIX) ;
01300			FOR C ← 2 THRU NC DO AA[C,0] ← LEFC + ((C-1)*(CC-WC)) DIV (NC-1) ;
01400			END ;
01500		LINECA ← LINECT(ITSIX) ; COLCA ← NC ;
01600		IF  NOT NORESP THEN CLOSET(ITSIX, TRUE, DISDECLAREIT) ;
01700		IF DISDECLAREIT THEN BEGIN STATA ← STATUS←3 ; DEFA ← 0 END ;
01800		OPEN!ACTIVE(ITSIX) ← AREAIDA ← 0 ;
01900		IF SAVAR AND  NOT DISDECLAREIT AND SAVAR NEQ ITSIX THEN PLACE(SAVAR) ELSE BEGIN AREAIXM←0; STATUS←-1 END ;
02000		END ;
02100	END "CLOSEAREA" ;
     

00100	PUBLIC RECURSIVE PROCEDURE DAREA(BOOLEAN TITAREA) ;$"#
00200	BEGIN
00300	INTEGER I, IX, SYMB, TEMP, A, B ;
00400	PRELOAD!WITH "LINE",  "TO",  "CHAR",  "TO",   "IN", "COLUMN", "COLUMN" ;
00500	OWN STRING ARRAY PRE[1:7] ; STRING ARRAY PAR[1:7] ;
00600	PRELOAD!WITH  NULL,   NULL,   NULL,   NULL,   NULL,   "WIDE",   "APART" ;
00700	OWN STRING ARRAY POST[1:7] ;
00800	DBREAK; DPASS ;
00900	IF  NOT THISISID THEN BEGIN WARN("=","AREA must have name"); THISWD←"!DUMMY" END ;
01000	SYMB ← SYMNUM(THISWD) ;
01100	PASS ;
01200	PARAMS(7, PRE, PAR, POST) ;
01300	IF  NOT ON THEN RETURN ;
01400	BIND(DECLARE(SYMB, AREATYPE), IX←PUSHI(AREAWDS,AREATYPE)) ;
01500	IF FULHIGH(IX)←NULSTR(PAR[1]) THEN BEGIN A←1 ; B←FHIGH END comment assume LINE 1 TO <frame height> ;
01600	ELSE BEGIN A ← CVD(PAR[1]) ;  B ← IF NULSTR(PAR[2]) THEN A ELSE CVD(PAR[2]) END ;
01700	LINE1(IX) ← A MAX 1 ;  LINECT(IX) ← B-A+1 MAX 1 ;
01800	IF FULWIDE(IX)← NULSTR(PAR[3]) THEN BEGIN A←1 ; B←FWIDE END
01900	ELSE BEGIN A ← CVD(PAR[3]) ;  B ← IF NULSTR(PAR[4]) THEN A ELSE CVD(PAR[4]) END ;
02000	CHAR1(IX) ← A MAX 1 ;  CHARCT(IX) ← B←B-A+1 MAX 1 ;
02100	TEXTAR(IX) ← IF TITAREA THEN 0 ELSE 1 ;
02200	IF NULSTR(PAR[5]) THEN A ← 1 comment Assume IN 1 COLUMNS <charct> WIDE ;
02300	ELSE	BEGIN "COLUMNS"
02400		A ← CVD(PAR[5]) ; comment How many ;
02500		IF FULSTR(PAR[6]) THEN B ← CVD(PAR[6]) MIN  B DIV A
02600		ELSE B ← (B+( TEMP←IF FULSTR(PAR[7]) THEN CVD(PAR[7]) ELSE 5 )) DIV A - TEMP ;
02700		END "COLUMNS" ;
02800	COLCT(IX) ← A MAX 1 ;  COLWID(IX) ← B MAX 1 ;
02900	OLMAX ← OLMAX + A*LINECT(IX) ;
03000	FOOTSTR(IX) ← PUSHS(1, NULL) ;
03100	MARGINS(IX) ← FONTSIX(IX) ← 0 ; TES 11/15/73 ;
03150	MILLSKIP(IX) ← MILLGSKIP(IX) ← 0 ; TES 11/7/74 ;
03200	TFONT(IX) ← OFONT(IX) ← DEFAULTFONT ; TES 11/15/73 ;
03300	END "DAREA" ;
     

00100	PUBLIC RECURSIVE PROCEDURE DCLOSE ;$"#
00200	BEGIN
00300	DBREAK ; PASS ;
00400	IF ON THEN
00500	IF THISTYPE=AREATYPE THEN CLOSEAREA(IX,FALSE)
00600	ELSE IF IX=IXPAGE THEN comment, * * * * * * * * * * * * * ;
00700	ELSE WARN("=","CLOSE What? "&SOMEINPUT) ;
00800	PASS ;
00900	END "DCLOSE" ;
     

00100	PUBLIC SIMPLE PROCEDURE GROWAA(INTEGER HOWMUCH) ;$"#
00200		BEGIN "GROWAA"  TES 11/6/74 ;
00300		AAA ← BIGGR2(AAA, HOWMUCH) ;
00400		IDASSIGN(AAA, AA) ;
00500		END "GROWAA" ;
     

00100	PUBLIC SIMPLE PROCEDURE MAKEAREA(INTEGER ITSIX) ;$"#
00200	BEGIN "MAKEAREA"
00300	INTEGER C, L, CS, LS, NCH, OCH, C1, CC, FW, L1, LC, FH ;
00400	C1 ← CHAR1(ITSIX) ; CC ← CHARCT(ITSIX) ;
00500	FW ← IF FRAMEIDA THEN WIDEF ELSE FWIDE ;
00600	L1 ← LINE1(ITSIX) ; LC ← LINECT(ITSIX) ;
00700	FH ← IF FRAMEIDA THEN HIGHF ELSE FHIGH ;
00800	IF FULWIDE(ITSIX) THEN
00900		BEGIN Comment Make frame width ;
01000		OCH ← CC ; CHARCT(ITSIX) ← NCH ← FW ;
01100		COLWID(ITSIX) ← (COLWID(ITSIX) * NCH)  DIV  OCH  ;
01200		END ;
01300	IF FULHIGH(ITSIX) THEN LINECT(ITSIX) ← FH ;
01400	L←OPEN!ACTIVE(ITSIX)←CREATE(0, AREC) ;
01500	IF NULLAREAS THEN BEGIN IDASSIGN(AREAIDA←NULLAREAS,THISAREA) ; INA←LHRH(L,INA) END ;
01600	IDASSIGN(AREAIDA ← L, THISAREA) ;
01700	DEFA ← ITSIX ; STATA ← 0 ; INA ← LHRH(0, NULLAREAS) ; NULLAREAS ← AREAIDA ;
01800	IDASSIGN(AAA←CREATE2(1, CS←COLCT(ITSIX)*2, 0, LS←LC+((LC DIV 2) MAX 8) ) , AA) ;
01900	ZEROWORDS(CS*(LS+1), AA[1,0]) ;
02000	COMMENT FOR C ← 1 THRU CS DO FOR L ← 0 THRU LS DO AA[C,L] ← 0 ;
02100	END "MAKEAREA" ;
     

00100	PUBLIC SIMPLE PROCEDURE PLACE(INTEGER NEWAREAIX) ;$"#
00200	COMMENT If No Place Area, AREAIXM=0.  AREAIDA NEQ 0 if STATUS= 0 or 1 ;        
00300	IF ON THEN
00400	BEGIN "PLACE"
00500	INTEGER FRM, ALLOW!FOR, MARGIX, FONTIX ;
00600	IF IXTYPE(NEWAREAIX) NEQ AREATYPE THEN
00700		BEGIN WARN("=","PLACE in non-area"); NEWAREAIX←IXTEXT END;
00800	IF AREAIXM THEN
00900		BEGIN TES 11/19/73 ;
01000		TFONT(AREAIXM) ← THISFONT ;
01100		OFONT(AREAIXM) ← OLDFONT ;
01200		END ;
01300	IF AREAIDA AND STATUS=1 THEN
01400		BEGIN
01500		COLA ← COL ; AA[COL,0] ← LHRH(COVERED,LINE) ; AA[PAL,0]←LHRH(COVERED,PINE) ; STATA←STATUS ;
01600		XGENA ← XGENLINES; RKJ;
01700		OVERA ← OVEREST ; TES 11/15/73;
01800		IF AREAIXM=NEWAREAIX THEN RETURN
01900		ELSE IF COL>COLS THEN BEGIN WARN("=","Can't PLACE inside footnotes!") ; RETURN END ;
02000		END ;
02100	IF XCRIBL AND AREAIXM NEQ NEWAREAIX THEN
02200		BEGIN INTEGER DUMMY ;TES 11/15/73 ;
02300		THISFONT ← TFONT(NEWAREAIX) ; OLDFONT ← OFONT(NEWAREAIX) ;
02400		IF (DUMMY←FNTFIL[THISFONT])>0 THEN MAKEBE(DUMMY, CW) ;
02500		END ;
02600	AREAIXM←NEWAREAIX ;
02700	IF (AREAIDA ← OPEN!ACTIVE(AREAIXM)) = 0 THEN MAKEAREA(AREAIXM)
02800	ELSE BEGIN MAKEBE(AREAIDA, THISAREA) ;  IDASSIGN(AAA, AA) ; END ;
02900	IF (MARGIX ← MARGINS(AREAIXM)) = 0 THEN BEGIN LMARG ← 0 ; RMARG ← COLWID(AREAIXM) END
03000	ELSE BEGIN LMARG ← LMARGX(MARGIX) ; RMARG ← RMARGX(MARGIX) END ;
03100	ALLOW!FOR ← 2 * COLWID(AREAIXM) ;
03200	IF ALLOW!FOR > LENGTH(OWL) THEN OWL ← OWL & SP & SPS(ALLOW!FOR - LENGTH(OWL)) ;
03300	COLS ← COLCT(AREAIXM) ;  LINES ← LINECT(AREAIXM) ; STATUS ← STATA ;
03400	IF STATUS=1 THEN
03500		BEGIN "IT'S OPEN"
03600		COL ← COLA ; PAL ← (COL+COLS-1) MOD (2*COLS) + 1 ; COMMENT, Leg SWAP Foot;
03700		LINE ← AA[COL,0] ; COVERED ← LH(LINE) ; LINE ← RH(LINE) ; PINE ← RH(AA[PAL,0]) ;
03800		XGENLINES ← XGENA; RKJ;
03900		OVEREST ← OVERA ; TES 11/15/73 ;
04000		END "IT'S OPEN"
04100	ELSE COL←PAL←LINE←COVERED←PINE←XGENLINES←OVEREST←0 ; RKJ ADDED XGENLINES;
04200		TES ADDED OVEREST 11/15/73;
04300	END "PLACE" ;
     

00100	PUBLIC RECURSIVE PROCEDURE OPENAREA(INTEGER ITSIX) ;$"#
00200	BEGIN "OPENAREA"
00300	INTEGER X, PREV, NEX, C1, CC, L1, LC ;
00400	IF FRAMEIDA=0 THEN OPENPAGE ; PLACE(ITSIX) ; IF STATUS=1 THEN RETURN ; REMNULLS ;
00500	C1 ← CHAR1(ITSIX) ; CC ← CHARCT(ITSIX) ;
00600	L1 ← LINE1(ITSIX) ; LC ← LINECT(ITSIX) ;
00700	IF C1+CC-1 > WIDEF THEN
00800		WARN(NULL,"AREA " & SYM[LDB(BIXNUM(ITSIX))] & " is wider than PAGE FRAME"&CRLF&
00900			"CHARS " & CVS(C1) & " TO " & CVS(C1+CC) &
01000			" exceeds " & CVS(WIDEF) & " WIDE") ;
01100	IF L1+LC-1 > HIGHF THEN
01200		WARN(NULL,"AREA " & SYM[LDB(BIXNUM(ITSIX))] & " is higher than PAGE FRAME"&CRLF&
01300			"LINES " & CVS(L1) & " TO " & CVS(L1+LC) &
01400			" exceeds " & CVS(HIGHF) & " HIGH") ;
01500	INA ← FRAMEIDA ;
01600	PREV ← 0 ; NEX ← ARF ; X ← AREAIDA ; COMMENT KEEP AREAS SORTED BY LEFT EDGE ;
01700	IF C1 > 1 THEN WHILE NEX DO
01800		BEGIN
01900		IDASSIGN(AREAIDA←NEX, THISAREA) ;
02000		IF DEFA THEN IF CHAR1(DEFA) GEQ C1 THEN DONE ELSE BEGIN END
02100		ELSE BEGIN IDASSIGN(AAA,AA) ; IF AA[1,0] GEQ C1 THEN DONE ; END ;
02200		PREV ← AREAIDA ; NEX ← ARA ;
02300		END ;
02400	IF PREV THEN
02500		BEGIN TES AND DCS REVISED 9/24/73@SU, 10/25/73@PARC ;
02600		IDASSIGN(AREAIDA←PREV, THISAREA) ; TES ADDED THIS ;
02700		ARA ← X ;
02800		END
02900	ELSE ARF ← X ;
03000	IDASSIGN(AREAIDA←X, THISAREA) ;  ARA ← NEX ;
03100	IDASSIGN(AAA, AA) ; TES 8/27/74 FIX BUG !!;
03200	STATA ← STATUS←1 ; COL ← 1 ; PAL ← COLS + 1 ;
03300	IF FINDTRAN(LDB(BIXNUM(ITSIX)), 4) THEN RESPOND(LLTHIS) ; comment BEFORE areaname ... ;
03400	END "OPENAREA" ;
     

00100	PUBLIC SIMPLE PROCEDURE REMNULLS ;$"#
00200	BEGIN "REMNULLS"
00300	INTEGER L, R, I ;
00400	L ← LH(INA) ; R ← RH(INA) ;
00500	IF L OR R THEN
00600		BEGIN
00700		I ← AREAIDA ;
00800		IF L THEN BEGIN IDASSIGN(AREAIDA←L,THISAREA); DPB(R, H2(INA)) ; END ELSE NULLAREAS ← R ;
00900		IF R THEN BEGIN IDASSIGN(AREAIDA←R,THISAREA); DPB(L, H1(INA)) ; END ;
01000		IDASSIGN(AREAIDA ← I, THISAREA) ;
01100		END
01200	ELSE NULLAREAS ← 0 ;
01300	END "REMNULLS" ;
     

00100	FINISHED
00200	
00300	ENDOF("AREAS")